package com.jic.interaction.JDVOP.service;

import com.jic.interaction.JDVOP.common.utils.RestResult;
import com.jic.interaction.JDVOP.model.vo.request.*;
import com.jic.interaction.JDVOP.model.vo.response.InvoiceDetailResponse;
import com.jic.interaction.JDVOP.model.vo.response.InvoiceItemResponse;
import com.jic.interaction.JDVOP.model.vo.response.InvoiceLogisticsResponse;
import com.jic.interaction.JDVOP.model.vo.response.InvoiceWaybillNumberResponse;
import org.apache.poi.ss.formula.functions.T;

import java.lang.reflect.InvocationTargetException;
import java.util.List;

/**
 * @Auther YGH
 * @DATE 2020/11/16/17:42
 */
public interface InvoiceService {
    //申请开票
    RestResult<Boolean> applyInvoice(InvoiceApplyRequest invoiceApplyRequest) throws IllegalAccessException, NoSuchMethodException, InvocationTargetException;

    //查询发票第三方申请单号
    RestResult<String> selInvoiceByOrderId(InvoiceByOrderIdRequest invoiceByOrderIdRequest) throws IllegalAccessException, NoSuchMethodException, InvocationTargetException;

    //查询发票概要
    RestResult<List<InvoiceDetailResponse>> selInvoiceOutline(InvoiceOutlineRequest invoiceOutlineRequest) throws IllegalAccessException, NoSuchMethodException, InvocationTargetException;

    //查询发票明细
    RestResult<InvoiceItemResponse> selInvoiceByIdorCodeList(InvoiceDetailedRequest invoiceDetailedRequest) throws IllegalAccessException, NoSuchMethodException, InvocationTargetException;

    //查询电子发票明细
    RestResult<List<T>> selElectronicsInvoiceByIdorType(InvoiceElectronicsDetailedRequest invoiceElectronicsDetailedRequest) throws IllegalAccessException, NoSuchMethodException, InvocationTargetException;

    //查询电子发票运单号
    RestResult<List<InvoiceWaybillNumberResponse>> selInvoiceByMarkIdList(InvoiceOutlineRequest invoiceOutlineRequest) throws IllegalAccessException, NoSuchMethodException, InvocationTargetException;

    //查询电子发票物流信息
    RestResult<List<InvoiceLogisticsResponse>> selInvoiceByJdOrderIdList(InvoiceByOrderIdRequest invoiceByOrderIdRequest) throws IllegalAccessException, NoSuchMethodException, InvocationTargetException;

    //取消发票申请
    RestResult<Boolean> CancelInvoice(InvoiceOutlineRequest invoiceOutlineRequest) throws IllegalAccessException, NoSuchMethodException, InvocationTargetException;

}
